/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package springconfiguracion;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.UrlResource;

/**
 *
 * @author odeen
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
            //Con BeanFactory
            BeanFactory fabrica = new XmlBeanFactory(new FileSystemResource("src/main/resources/palindromoSpringXMLConfig.xml"));
            Palindromo pal = (Palindromo) fabrica.getBean("palindromo");
            System.out.println(pal.ejecutar());
                        
            //Con ApplicationContext
            ApplicationContext aplicacion = new ClassPathXmlApplicationContext("palindromoSpringXMLConfig.xml");
            Palindromo pal2 = (Palindromo) aplicacion.getBean("palindromo");
            System.out.println(pal2.ejecutar());
        /*
         *  BeanFactory es el punto de entrada a la configuración de spring, desde la que podemos instanciar los objetos.
         *  ApplicationContext es igual, pero agrega otros servicios:
         *      - soporte de i18n
         *      - forma genérica de acceso a recursos como jndi, mail, etc...
         *      - publicación de eventos en beans que sean receptores de eventos
         */
    }

    public static void otrasBeanFactory(String[] args) throws FileNotFoundException, MalformedURLException {
        //Otros modos de obtener la fabrica de beans (hay alguno más, revisar el paquete "org.springframework.core.io")
        BeanFactory fabrica1 = new XmlBeanFactory(new FileSystemResource("src/main/resources/palindromoSpringXMLConfig.xml")); // Desde un fichero del sistema
        BeanFactory fabrica2 = new XmlBeanFactory(new ClassPathResource("palindromoSpringXMLConfig.xml")); //Desde el classpath
        BeanFactory fabrica3 = new XmlBeanFactory(new InputStreamResource(new FileInputStream("src/main/reources/palindromoSpringXMLConfig.xml"))); //Desde un flujo de entrada
        BeanFactory fabrica4 = new XmlBeanFactory(new UrlResource("http://servidor:puerto/fichero.xml")); //Desde una url
        byte array[] = new byte[]{0, 0, 0, 0}; //Se supone que lo obtendríamos de algún lugar (base de datos, socket, etc...)
        BeanFactory fabrica5 = new XmlBeanFactory(new ByteArrayResource(array)); //Desde un array de bytes
    }

    public static void otrosApplicationContext(String[] args) {
        //Otros modos de obtener el contexto de beans (hay alguno más, revisar el paquete "org.springframework.context.support")
        ApplicationContext aplicacion1 = new FileSystemXmlApplicationContext("src/main/resources/palindromoSpringXMLConfig.xml"); // Desde un fichero del sistema
        ApplicationContext aplicacion2 = new ClassPathXmlApplicationContext("palindromoSpringXMLConfig.xml"); //Desde el classpath
    }
}
